package shm.capaDatos.entidades;

import java.io.Serializable;
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Embedded;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;

import shm.capaDatos.vo.DatosAuditoriaVO;
import shm.capaDatos.vo.EstadoProyectoVO;
import shm.capaDatos.vo.ProyectoVO;
import shm.capaDatos.vo.UsuarioVO;
import shm.util.Utilidad;
@Entity
public class Proyecto implements Serializable{
	@Id
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	private Integer id;
	@Column(length=100,nullable = false, unique = false)
	private String nombre;
	@Column(length=255,nullable = true, unique = false)
	private String descripcion;
	@ManyToOne
	@JoinColumn(name="estado_id", nullable = false)
	private EstadoProyecto estado;
	@Embedded
	private DatosAuditoria datosAuditoria;
	private static final long serialVersionUID = 1L;
	
	public ProyectoVO getVO(){
		EstadoProyectoVO estadoVO = null;
		DatosAuditoriaVO datosAuditoriaVO = null;
		if(this.estado != null){
			estadoVO = this.estado.getVO();
		}
		if(this.datosAuditoria != null){
			datosAuditoriaVO = this.datosAuditoria.getVO();
		}
		ProyectoVO proyectoVO = new ProyectoVO(this.id, this.nombre,
				this.descripcion, estadoVO,datosAuditoriaVO) ;
		return proyectoVO;
	}
	public void setVO(ProyectoVO proyectoVO) {
		
		if(proyectoVO !=null){
			EstadoProyectoVO estadoVO = proyectoVO.getEstado();
			this.id = proyectoVO.getId();
			this.nombre = proyectoVO.getNombre();
			this.descripcion = proyectoVO.getDescripcion();
			if(estadoVO != null){
				if(this.estado == null){
					this.estado = new EstadoProyecto();
				}
				this.estado.setVO(estadoVO);
			}else{
				this.estado = null;
			}
		}
	}	
	
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public DatosAuditoria getDatosAuditoria() {
		return datosAuditoria;
	}
	
	public String getNombre() {
		return nombre;
	}
	public String getDescripcion() {
		return descripcion;
	}
	public EstadoProyecto getEstado() {
		return estado;
	}
	
	public void setNombre(String nombre) {
		this.nombre = nombre;
	}
	public void setDescripcion(String descripcion) {
		this.descripcion = descripcion;
	}
	public void setEstado(EstadoProyecto estado) {
		this.estado = estado;
	}
	
	public void setDatosAuditoria(DatosAuditoria datosAuditoria) {
		this.datosAuditoria = datosAuditoria;
	}
	public void actualizacion(UsuarioVO usuarioActualizacion, Date fechaActualizacion){
		if(this.datosAuditoria == null){
			this.datosAuditoria = new DatosAuditoria();
		}
		this.datosAuditoria.actualizacion(usuarioActualizacion, fechaActualizacion);
	}
	public void creacion(UsuarioVO usuarioCreacion, Date fechaCreacion){
		this.actualizacion(usuarioCreacion, fechaCreacion);
		this.datosAuditoria.creacion(usuarioCreacion, fechaCreacion);
	}
	public void eliminacion(UsuarioVO usuarioEliminacion, Date fechaEliminacion){
		this.actualizacion(usuarioEliminacion, fechaEliminacion);
		this.datosAuditoria.eliminacion(usuarioEliminacion, fechaEliminacion);
	}
	public boolean equals(Object o){
		if(o.getClass() !=Proyecto.class){
			return false;
		}
		Proyecto proyecto = (Proyecto) o;
		if(Utilidad.iguales(this.id, proyecto.getId())){
			if(Utilidad.iguales(this.nombre, proyecto.getNombre())){
				if(Utilidad.iguales(this.descripcion, proyecto.getDescripcion())){
					return Utilidad.iguales(this.estado, proyecto.getEstado());	
				}else{
					return false;
				}				
			}else{
				return false;
			}
		}else{
			return false;
		}
	}

}
